// Ninf-G-XX, ver. 0.1
// Copyright 2011 National Institute of Advanced Industrial Science and Technology
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef __NC_GEN_SYMBOL_H__
#define __NC_GEN_SYMBOL_H__

#include <vector>
#include "Types.hpp"

namespace ninf {
	namespace gen {
		
		/* symbol and symbol table */
		class GenSymbol	{
		public:
			static std::vector<GenSymbol *> symbols;
			
			const char    *           name;

			/** symbol type, KEYWORD, NAME, etc ... */
			ninf::gen::GenSymbolType  type /*:8*/;	
			int                       value;
			
			GenSymbol(const char * name, ninf::gen::GenSymbolType type, int value);
			
			static void 
			intern(const char * name, 
						 ninf::gen::GenSymbolType type, 
						 int value);

			static ninf::gen::GenSymbol * 
			find(const char * name);
		};
	}
}
#define SYM_NAME(sp) ((sp)->name)

#endif
